blob: 9eedcb2f10a819c3fac15a3bd09ddc8024497718 (
plain) (
tree)
|
|
<script lang="ts">
import { updateArchives } from '$gql/Mutations';
import { archiveQuery } from '$gql/Queries';
import { Direction, Layout, type FullArchiveFragment, type PageFragment } from '$gql/graphql';
import { initReaderContext } from '$lib/Reader.svelte';
import { toastFinally } from '$lib/Toasts';
import Guard from '$lib/components/Guard.svelte';
import Head from '$lib/components/Head.svelte';
import Titlebar from '$lib/components/Titlebar.svelte';
import Grid from '$lib/containers/Grid.svelte';
import Gallery from '$lib/gallery/Gallery.svelte';
import PageView from '$lib/reader/PageView.svelte';
import Reader from '$lib/reader/Reader.svelte';
import { initSelectionContext } from '$lib/selection/Selection.svelte';
import ArchiveDelete from '$lib/tabs/ArchiveDelete.svelte';
import ArchiveDetails from '$lib/tabs/ArchiveDetails.svelte';
import ArchiveEdit from '$lib/tabs/ArchiveEdit.svelte';
import Tab from '$lib/tabs/Tab.svelte';
import Tabs from '$lib/tabs/Tabs.svelte';
import { getContextClient } from '@urql/svelte';
import type { PageProps } from './$types';
let { data }: PageProps = $props();
const client = getContextClient();
const reader = initReaderContext();
function updateCover(id: number) {
updateArchives(client, { ids: data.id, input: { cover: { id } } }).catch(toastFinally);
}
let selection = initSelectionContext<PageFragment>(
'Page',
(p) => p.path,
(p) => p.comicId === null
);
let result = $derived(archiveQuery(client, { id: data.id }));
let archive: FullArchiveFragment | undefined = $state();
$effect(() => {
if (!$result.stale && $result.data?.archive.__typename === 'FullArchive') {
archive = $result.data.archive;
reader.pages = $result.data.archive.pages;
selection.view = $result.data.archive.pages;
}
});
</script>
<Head section="Archive" title={archive?.name} />
{#if archive}
<Grid>
<header>
<Titlebar title={archive.name} />
</header>
<aside>
<Tabs>
<Tab initial id="details" title="Details">
<ArchiveDetails {archive} />
</Tab>
<Tab id="edit" title="Edit">
<ArchiveEdit {archive} />
</Tab>
<Tab id="deletion" title="Delete">
<ArchiveDelete {archive} />
</Tab>
</Tabs>
</aside>
<main class="overflow-auto">
<Gallery pages={archive.pages} open={reader.open} {updateCover} />
</main>
</Grid>
{:else}
<Guard {result} />
{/if}
<Reader>
<PageView layout={Layout.Single} direction={Direction.LeftToRight} />
</Reader>
|